#ifndef SESSIONFRIENDAREA_H
#define SESSIONFRIENDAREA_H

#include <QWidget>
#include <QScrollArea>
#include <QScrollBar>
#include <QVBoxLayout>
#include <QPushButton>
#include <QLabel>
#include <QPaintEvent>
#include <QStyleOption>
#include <QPainter>

#include "model/util.h"

///////////////////////////////
// 滚动区域
///////////////////////////////

///////////////////////////////
// 滚动区域中item的类型
///////////////////////////////
enum ItemType
{
    Session,
    Friend,
    Apply
};

class SessionFriendArea : public QScrollArea
{
    Q_OBJECT
public:
    explicit SessionFriendArea(QScrollArea *parent = nullptr);

    // 清理item
    void clear();
    //添加一个item
    void addItem(ItemType itemType, const QString &id, const QIcon &avatar, const QString &name, const QString &text = "");
    // 选中某个item, 通过index下标选择
    void clickItem(int index);

private:
    QWidget *_container;

signals:
};


///////////////////////////////
// 滚动区域中的item
///////////////////////////////
class SessionFriendItem : public QWidget
{
    Q_OBJECT
public:
    SessionFriendItem(QWidget *owner, const QIcon &avatar, const QString &name, const QString &msg);

    // 自定义类要让QSS生效需重写此函数, 函数体照抄即可
    void paintEvent(QPaintEvent *ev) override;

    // 重写鼠标点击事件
    virtual void mousePressEvent(QMouseEvent *ev) override;
    // 重写鼠标悬停事件
    void enterEvent(QEnterEvent *ev) override;
    void leaveEvent(QEvent *ev) override;

    void select();
    virtual void active() = 0;
protected:
    QWidget *_owner;
    bool _select = false;

    QPushButton *_avatarBtn;  // 头像
    QLabel *_nameLabel;       // 昵称
    QLabel *_textLabel;       // 最后一条消息或签名
};

///////////////////////////////
// 会话item
///////////////////////////////
class SessionItem : public SessionFriendItem
{
    Q_OBJECT
public:
    SessionItem(QWidget *owner, const QString &chatSessionId, const QIcon &avatar,
                const QString &name, const QString &msg);

    void active() override;
    void updateLastMsg(const QString &chatSessionId);
private:
    QString _chatSessionId; // 会话id
    QString _msg;
};

///////////////////////////////
// 好友item
///////////////////////////////
class FriendItem : public SessionFriendItem
{
    Q_OBJECT
public:
    FriendItem(QWidget *owner, const QString &friendId, const QIcon &avatar,
                const QString &name, const QString &desc);

    void active() override;
private:
    QString _friendId;  // 好友id
};

///////////////////////////////
// 申请item
///////////////////////////////
class ApplyItem : public SessionFriendItem
{
    Q_OBJECT
public:
    ApplyItem(QWidget *owner, const QString &userId, const QIcon &avatar, const QString &name);

    // 鼠标点击后无事发生
    void mousePressEvent(QMouseEvent *ev) override;
    void active() override;
private:
    QString _userId;  // 申请人id

    QPushButton *_acceptBtn;  // 同意按钮
    QPushButton *_rejectBtn;  // 拒绝按钮
};

#endif // SESSIONFRIENDAREA_H
